package com.ruoyi.utils;


import com.aspose.words.*;
import com.aspose.words.Font;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import java.awt.*;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Component
public class TableUtils {

    public static class TdInfo {
        public TdInfo(Integer rowSpan, Integer colSpan, String text) {
            this.rowSpan = rowSpan;
            this.colSpan = colSpan;
            this.text = text;
        }
        /**
         * 垂直合并单元格 大于1需要合并
         */
        private Integer rowSpan;
        /**
         * 水平合并单元格 大于1需要合并
         */
        private Integer colSpan;
        /**
         * 文本信息
         */
        private String text;
        //省略 get ,set 方法
    }

    public static String createMeSpatialWord(Map<String,Object> map, File file) {
        try {
            // 创建一个新的文档
            Document doc = new Document();
            DocumentBuilder builder = new DocumentBuilder(doc);

            // 在文档中插入表格
            Table table = builder.startTable(); // 开始创建表格

            // 插入表头

            List<String> headlist = (List<String>) map.get("headList");
            List<Double> methodList = (List<Double>) map.get("methodList");
            List<Double> methodLists = (List<Double>) map.get("methodLists");
//            builder.insertCell();
//            builder.getCellFormat().setHorizontalMerge(CellMerge.FIRST);
//            builder.write("Text in merged cells.");
//            builder.insertCell();
//// This cell is merged to the previous and should be empty.
//            builder.getCellFormat().setHorizontalMerge(CellMerge.PREVIOUS);
//            builder.endRow();
//            builder.insertCell();
//            builder.getCellFormat().setHorizontalMerge(CellMerge.NONE);
//            builder.write("Text in one cell.");
//            builder.insertCell();
//            builder.write("Text in another cell.");

            for (int i = 0; i<headlist.size();i++) {
                if (methodLists.size() == 1) {
                    builder.insertCell();
                    builder.write(headlist.get(i));
                } else {
                    if (i<2){
                        builder.insertCell();
                        builder.write(headlist.get(i));
                    }else if (i == 2) {
                        builder.insertCell();
                        builder.getCellFormat().setHorizontalMerge(CellMerge.FIRST);
                        builder.write(headlist.get(i));
                        for (int j =0; j<methodLists.size()-1;j++){
                            builder.insertCell();
                            builder.getCellFormat().setHorizontalMerge(CellMerge.PREVIOUS);
                        }
                    } else if (i == 2 + methodLists.size()) {
                        builder.insertCell();
                        builder.getCellFormat().setHorizontalMerge(CellMerge.FIRST);
                        builder.write(headlist.get(i));
                        for (int j =0; j<methodLists.size()-1;j++){
                            builder.insertCell();
                            builder.getCellFormat().setHorizontalMerge(CellMerge.PREVIOUS);
                        }
                    }else {
                        continue;
                    }
//                    else if (2 < i && i < 2 + methodLists.size()) {
//                        builder.insertCell();
//                        builder.getCellFormat().setHorizontalMerge(CellMerge.PREVIOUS);
//
//                        builder.getCellFormat().setHorizontalMerge(CellMerge.FIRST);
//                    } else if (i == 2 + methodLists.size()) {
//                        builder.getCellFormat().setHorizontalMerge(CellMerge.NONE);
//                        builder.insertCell();
//                        builder.getCellFormat().setHorizontalMerge(CellMerge.FIRST);
//                        builder.write(headlist.get(i));
//                    } else {
//                        builder.insertCell();
//                        builder.getCellFormat().setHorizontalMerge(CellMerge.PREVIOUS);
////                        builder.getCellFormat().setHorizontalMerge(CellMerge.NONE);
//                        builder.getCellFormat().setHorizontalMerge(CellMerge.FIRST);
//                    }
                }
            }
//                if (i <= 1) {
//                    builder.insertCell();
//                    builder.write(headlist.get(i));
//                } else if (i == 2) {
//                        builder.insertCell();
//                        builder.getCellFormat().setHorizontalMerge(CellMerge.FIRST);
//                        builder.write(headlist.get(i));
//
//                }else if (i>){
//
//                }
//                else if (i<=3){
//                    builder.insertCell();
//                    builder.getCellFormat().setHorizontalMerge(CellMerge.PREVIOUS);
//                    builder.endRow();
//                }else {
//                    builder.insertCell();
//                    builder.write(headlist.get(i));
//                }
//                if (i < 1){
//                    builder.insertCell();
//                    builder.getCellFormat().setHorizontalMerge(CellMerge.FIRST);
//                    builder.write(headlist.get(i));
//                }else if (i==1){
//                    builder.insertCell();
//                    builder.write(headlist.get(i));
//                    builder.getCellFormat().setHorizontalMerge(CellMerge.PREVIOUS);
//                }else {
//                    builder.insertCell();
//                    builder.write(headlist.get(i));
//                    builder.getCellFormat().setHorizontalMerge(CellMerge.NONE);
//                }
//            }
            builder.endRow();
            builder.getCellFormat().setHorizontalMerge(CellMerge.NONE);
//            builder.getCellFormat().setHorizontalMerge(CellMerge.PREVIOUS);
            for (Double aa :methodList) {
                builder.insertCell();
                builder.write(aa+"");
            }
//            builder.insertCell();
//            builder.getCellFormat().setHorizontalMerge(CellMerge.FIRST);
//            builder.write("Text in merged cells.");
//            builder.insertCell();
//// This cell is merged to the previous and should be empty.
//            builder.getCellFormat().setHorizontalMerge(CellMerge.PREVIOUS);
//            builder.endRow();
//            builder.insertCell();
//            builder.getCellFormat().setHorizontalMerge(CellMerge.NONE);
//            builder.write("Text in one cell.");
//            builder.insertCell();
//            builder.write("Text in another cell.");
//            builder.endRow();
            builder.endTable();
//            builder.write("表头1");
//            builder.endRow();
            doc.save("C:\\Users\\zys\\Desktop\\aaa.docx");
//            // 实例化一个document对象
//            Document document = new Document();
//            // 创建一个DocumentBuilder类的对象，并使用Document对象对其进行初始化
//            DocumentBuilder builder = new DocumentBuilder(document);
//            // Specify font formatting
//            Font font = builder.getFont();
//            font.setSize(13);
//            //字体加粗
//            font.setBold(true);
//            //设置字体颜色
//            font.setColor(Color.RED);
//            //设置字体
//            font.setName("宋体");
//            //插入文本行信息
//            builder.write("测试生成word文件");
//            //换行符
//            builder.insertBreak(BreakType.LINE_BREAK);
//            //换页符
//            //builder.insertBreak(BreakType.PAGE_BREAK);
//            font.setColor(Color.BLACK);
//            //设置文本内容格式
//            //ParagraphFormat paragraphFormat = builder.getParagraphFormat();
//            //设置首行缩进2个字符
//            //paragraphFormat.setFirstLineIndent(font.getSize() * 2);
//            builder.write("insert table info------------------------->");
//            builder.insertBreak(BreakType.LINE_BREAK);
//            //插入表格信息
//            int size = trList.size(), tdSize;
//            // 创建表格
//            Table table = builder.startTable();
//            List<TdInfo> tdList;
//            TdInfo tdInfo;
//            //存储垂直合并单元格的信息
//            Map<Integer, Integer> rowSpanMap = new HashMap<Integer, Integer>();
//            for (int i = 0; i < size; i++) {
//                tdList = trList.get(i);
//                //迭代单元格信息
//                tdSize = tdList.size();
//                for (int j = 0; j < tdSize; j++) {
//                    tdInfo = tdList.get(j);
//
//                    //CellMerge.FIRST和CellMerge.PREVIOUS需要组合使用才能合并单元格,FIRST表示为主要的单元格,PREVIOUS表示为被合并的单元格
//                    if (tdInfo.getRowSpan() > 1) {
//                        //垂直合并单元格
//                        rowSpanMap.put(j, tdInfo.getRowSpan() + i);
//                        builder.insertCell();
//                        builder.getCellFormat().clearFormatting();
//                        builder.getCellFormat().setVerticalMerge(CellMerge.FIRST);
//                    } else {
//                        int rowNumber = rowSpanMap.containsKey(j) ? rowSpanMap.get(j) : 0;
//                        if (j < rowNumber) {
//                            //合并行单元格信息
//                            builder.insertCell();
//                            builder.getCellFormat().clearFormatting();
//                            builder.getCellFormat().setVerticalMerge(CellMerge.PREVIOUS);
//                        }
//                        builder.insertCell();
//                        builder.getCellFormat().clearFormatting();
//                    }
//                    if (tdInfo.getColSpan() > 1) {
//                        //水平合并单元格
//                        builder.getCellFormat().setHorizontalMerge(CellMerge.FIRST);
//                    }
//                    //垂直居中对齐
//                    //builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER);
//                    if(i==0){
//                        //设置首行的背景色为白色
//                        builder.getCellFormat().getShading().setBackgroundPatternColor(Color.LIGHT_GRAY);
//                        //水平居中对齐
//                        builder.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER);
//                    }else{
//                        builder.getParagraphFormat().setAlignment(ParagraphAlignment.LEFT);
//                    }
//                    //写入文本
//                    builder.write(tdInfo.getText());
//                    for (int p = 0; p < tdInfo.getColSpan() - 1; p++) {
//                        //合并列单元格需要插入对应的空白列
//                        builder.insertCell();
//                        builder.getCellFormat().clearFormatting();
//                        builder.getFont().clearFormatting();
//                        builder.getCellFormat().setHorizontalMerge(CellMerge.PREVIOUS);
//                        builder.getCellFormat().setVerticalMerge(CellMerge.NONE);
//                    }
//                }
//                // 表格内的换行符
//                builder.endRow();
//            }
//            // 表格结束
//            builder.endTable();
//            //table.autoFit(AutoFitBehavior.AUTO_FIT_TO_WINDOW);
//            //生成文件
//            document.save(file.getAbsolutePath());
//            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

//    public static String createTable(String[] headList, List<Map<Integer,Object>> list, String fileName, String piPath, String directory){
//        Document doc = null;
//        String path = "";
//        try {
//            doc = new Document();
//            DocumentBuilder builder = new DocumentBuilder( doc );
//            Table table = builder.startTable();
//            // Insert a cell
//            //AutoFitBehavior.AUTO_FIT_TO_CONTENTS 根据内容调整表格
//            // AUTO_FIT_TO_WINDOW 根据窗口调整表格
//            // FIXED_COLUMN_WIDTHS  固定列宽
//            for (String head : headList) {
//                builder.insertCell();
//                table.autoFit( AutoFitBehavior.FIXED_COLUMN_WIDTHS);
//                builder.getParagraphFormat().setAlignment( ParagraphAlignment.CENTER );
//                builder.getCellFormat().setWidth(430/headList.length);
//                builder.getFont().setNameFarEast("黑体");//设置字体
//                builder.getFont().setSize(14);
//                builder.write(head);
//            }
//            // End row
//            builder.endRow();
//            builder.getFont().setNameFarEast("宋体");
//            builder.getFont().setSize(11);
//            // start a next row and set its properties
////            builder.getRowFormat().setHeight( 20 );
////            builder.getRowFormat().setHeightRule( HeightRule.EXACTLY );
//            for (Map<Integer,Object> map : list) {
//                for (int i = 0; i < headList.length; i++){
//                    builder.insertCell();
//                    builder.write(map.get(i)+"");
//                }
//            }
//            builder.endRow();
//            // End table
//            builder.endTable();
//            //表格画完后，表格居中
//            table.setAlignment( TableAlignment.CENTER );//表格整体居中
//            File directoryPath = new File(piPath+directory);
//            //判断文件路径是否存在
//            if (!directoryPath.exists()){
//                directoryPath.mkdirs();//创建目录
//            }
//            String filePath = piPath+directory+fileName;
//            doc.save( filePath);
//            String prefix = PictureProperties.getUrl();
//            path = prefix+directory+fileName;
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return path;
//    }
//
//    public static String createTable1(List<ProbMeasureManagementParam> list, String[] headList, String fileName, String piPath, String directory){
//        Document doc = null;
//        String path = "";
//        try {
//            doc = new Document();
//            DocumentBuilder builder = new DocumentBuilder( doc );
//            // Insert a cell
//            //AutoFitBehavior.AUTO_FIT_TO_CONTENTS 根据内容调整表格
//            // AUTO_FIT_TO_WINDOW 根据窗口调整表格
//            // FIXED_COLUMN_WIDTHS  固定列宽
//            //设置表头
//            //编辑文档样式
//            CellFormat cellFormat = builder.getCellFormat();
//            cellFormat.setVerticalAlignment(CellVerticalAlignment.CENTER); //垂直居中对齐
//
//            Paragraph paragraph = builder.getCurrentParagraph();
//            paragraph.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER);//水平居中对齐
//            builder.getFont().setNameFarEast("方正小标简体");//设置字体
//            builder.getFont().setSize(21);
//            builder.writeln("暴露问题及解决措施");
//            //表格开始编辑
//            Table table = builder.startTable();
//            for (int i = 0;i<headList.length;i++) {
//                builder.insertCell();
//                if (i==0||i==1||i==5){
//                    table.autoFit( AutoFitBehavior.FIXED_COLUMN_WIDTHS);
//                    builder.getParagraphFormat().setAlignment( ParagraphAlignment.CENTER );
//                    builder.getCellFormat().setWidth(40);
//                }else {
//                    table.autoFit( AutoFitBehavior.FIXED_COLUMN_WIDTHS);
//                    builder.getParagraphFormat().setAlignment( ParagraphAlignment.CENTER );
//                    builder.getCellFormat().setWidth(72);
//                }
//                builder.getFont().setNameFarEast("黑体");//设置字体
//                builder.getFont().setSize(14);
//                builder.write(headList[i]);
//            }
//            builder.endRow();
//            for (int j = 0;j<list.size();j++){
//                ProbMeasureManagementParam param = list.get(j);
//                builder.getFont().setNameFarEast("宋体");//设置字体
//                builder.getFont().setSize(11);
//                builder.insertCell();
//                builder.getCellFormat().setWidth(40);
//                builder.write(param.getSerials()+"");
//                builder.insertCell();
//                builder.getCellFormat().setWidth(40);
//                builder.write(param.getProbType());
//                builder.insertCell();
//                builder.getCellFormat().setWidth(72);
//                builder.write(param.getProbContent());
//                builder.insertCell();
//                builder.getCellFormat().setWidth(72);
//                builder.write(param.getProbCause());
//                builder.insertCell();
//                builder.getCellFormat().setWidth(72);
//                builder.write(param.getProbProperty());
//                builder.insertCell();
//                builder.getCellFormat().setWidth(40);
//                builder.write(param.getProbWeight());
//                builder.insertCell();
//                builder.getCellFormat().setWidth(72);
//                builder.write(param.getCountermeasure());
//                builder.endRow();
//            }
////            builder.endRow();
//            // End table
//            builder.endTable();
//            //表格画完后，表格居中
//            table.setAlignment( TableAlignment.CENTER );//表格整体居中
//            File directoryPath = new File(piPath+directory);
//            //判断文件路径是否存在
//            if (!directoryPath.exists()){
//                directoryPath.mkdirs();//创建目录
//            }
//            String filePath = piPath+directory+fileName;
//            doc.save( filePath);
//            String prefix = PictureProperties.getUrl();
//            path = prefix+directory+fileName;
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return path;
//    }
}
